﻿using System;
using System.Collections.Generic;
using System.Text;

using System.Windows.Forms;

namespace 基金信息查看工具
{
    /// <summary>
    /// 辅助功能函数
    /// </summary>
    class Tools
    {
        #region 文件拖拽功能函数

        /// <summary>
        /// 文件拖进事件处理:
        /// 获取数据源的链接Link
        /// </summary>
        public void dragEnter(DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))    //判断拖来的是否是文件
                e.Effect = DragDropEffects.Link;                //是则将拖动源中的数据连接到控件
            else e.Effect = DragDropEffects.None;
        }

        /// <summary>
        /// 文件放下事件处理：
        /// 放下, 另外需设置对应控件的 AllowDrop = true; 
        /// 获取的文件名形如 "d:\1.txt;d:\2.txt"
        /// </summary>
        public string dragDrop(DragEventArgs e)
        {
            string filesName = "";
            Array file = (System.Array)e.Data.GetData(DataFormats.FileDrop);//将拖来的数据转化为数组存储

            //判断是否为目录，从目录载入文件
            if (file.Length == 1)
            {
                string str = file.GetValue(0).ToString();
                if (!System.IO.File.Exists(str) && System.IO.Directory.Exists(str)) //拖入的不是文件，是文件夹
                {
                    string[] files = System.IO.Directory.GetFiles(str);
                    for (int i = 0; i < files.Length; i++)
                        filesName += (files[i] + (i == files.Length - 1 ? "" : ";"));

                    return filesName;
                }
            }

            //拖入的所有文件
            int len = file.Length;
            for (int i = 0; i < len; i++)
            {
                filesName += (file.GetValue(i).ToString() + (i == file.Length - 1 ? "" : ";"));
            }

            return filesName;
        }

        #endregion

        #region 文件读取与保存

        /// <summary>
        /// 获取文件中的数据串
        /// </summary>
        public string fileToString(String filePath)
        {
            string str = "";

            //获取文件内容
            if (System.IO.File.Exists(filePath))
            {
                System.IO.StreamReader file1 = new System.IO.StreamReader(filePath);//读取文件中的数据
                str = file1.ReadToEnd();                                            //读取文件中的全部数据

                file1.Close();
                file1.Dispose();
            }
            return str;
        }


        /// <summary>
        /// 保存数据data到文件处理过程，返回值为保存的文件名
        /// </summary>
        public String SaveProcess(String data, String name)
        {
            string CurDir = System.AppDomain.CurrentDomain.BaseDirectory + @"基金信息\";    //设置当前目录
            if (!System.IO.Directory.Exists(CurDir)) System.IO.Directory.CreateDirectory(CurDir);   //该路径不存在时，在当前文件目录下创建文件夹"导出.."

            //不存在该文件时先创建
            String filePath = CurDir + name + ".txt";
            System.IO.StreamWriter file1 = new System.IO.StreamWriter(filePath, false);     //文件已覆盖方式添加内容

            file1.Write(data);                                                              //保存数据到文件

            file1.Close();                                                                  //关闭文件
            file1.Dispose();                                                                //释放对象

            return filePath;
        }

        #endregion

        #region 网络数据的读取

        //从给定的网址提取基金信息
        public string[] getWebData(string[] url)
        {
            string[] data = new string[url.Length];

            //从网址中获取数据
            System.Net.WebClient client = new System.Net.WebClient();
            client.Encoding = System.Text.Encoding.Default;

            for (int i = 0; i < data.Length; i++)
            {
                try
                {   //提取数据, ...,latestJzInfo:['20150417','1.1164','0.52'],navList:[...
                    string str = client.DownloadString(url[i]);

                    int i0 = str.IndexOf("latestJzInfo:"), i1 = str.IndexOf("[", i0), i2 = str.IndexOf("]", i0);
                    data[i] = str.Substring(i1 + 1, i2 - 1 - i1).Replace("'", "");  // 20150417,1.1164,0.52
                }
                catch (Exception) { data[i] = "0,0,0"; }
            }

            client.Dispose();
            return data;
        }

        #endregion

        #region 数组串与单个串的转换

        /// <summary>
        /// 数组串，合并为一个串
        /// </summary>
        public string ToString(string[][] data)
        {
            string str = "";
            for (int i = 0; i < data.Length; i++)
            {
                string[] D = data[i];
                for (int j = 0; j < D.Length; j++)
                {
                    str += D[j];
                    if (j != D.Length - 1 && !str.Equals("")) str += ",";
                }
                if (i != data.Length - 1 && !str.Equals("")) str += ";";
            }
            return str;
        }

        /// <summary>
        /// 将一个串，分割为数组串
        /// </summary>
        public string[][] ToArray(string str)
        {
            string[] str1 = str.Split(';');
            string[][] data = new string[str1.Length][];

            for (int i = 0; i < str1.Length; i++)
            {
                string[] str2 = str1[i].Split(',');
                data[i] = new string[str2.Length];
                for (int j = 0; j < str2.Length; j++)
                {
                    data[i][j] = str2[j];
                }
            }
            return data;
        }

        #endregion
    }
}
